﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Controller;
using Interface;

// Dette vindue er lavet af Gruppe 4 DM12a
namespace BookingSystem
{
    /// <summary>
    /// Interaction logic for VisKundenKvittering.xaml
    /// </summary>
    public partial class VisKundenKvittering : Window
    {
        BookingController minBookingController;

        public VisKundenKvittering(BookingController minBookingController)
        {
            InitializeComponent();

            this.minBookingController = minBookingController;

            LoadTreViewUsingCode(treeView); // Metode til at vise indholdet i treeview
        }

        // Metode til at loade en selvlavet treeview, hvor der er en parameter med en treeview
        public void LoadTreViewUsingCode(TreeView treeviewName)
        {
            // treeviewitems instantiere et nyt objekt af klassen til treeviewet.
            TreeViewItem treeItemKunde;
            TreeViewItem treeItemBooking;
            TreeViewItem treeItemVærelse;
            TreeViewItem treeItemForbrug;
            TreeViewItem treeItemTilbehør;

            try
            {
                // For hver kunde i kundelisten skal den udføre foreach sætningen
                foreach (IKunde kunde in minBookingController.KundeList())
                {
                    // Her instantieres den nye treeviewitem. Hvor vi både skaber vores eget udseende.
                    treeItemKunde = new TreeViewItem(); StackPanel kundePic = new StackPanel(); // stackpanel er en toolbox control som stiller ting pænt op
                    kundePic.Orientation = Orientation.Horizontal; // Her gør den stackpanel horisontal
                    Image img = new Image(); // Vi skaber et nyt billede
                    img.Source = new BitmapImage(new Uri("pack://application:,,,/Images/user.png")); // og henter billedet fra systemet i image mappen
                    img.Height = 15; // Der bestemmes en højde og bredde får billedet.
                    img.Width = 15;
                    var txt = new TextBlock(); // Efter billedet kommer en textblock som beskriver kunden
                    txt.Margin = new Thickness(7, 0, 0, 0); // Her bestemmes textblockens længde
                    txt.Text = kunde.Navn + ": " + kunde.KundeId; 
                    kundePic.Children.Add(img); // Stackpanel som vi instantierede, lægger et billede ind først
                    kundePic.Children.Add(txt); // og efterfølgende teksten efter billedet.
                    
                    treeItemKunde.Header = kundePic; // treeitemKunde.header er ligesom overskriften på hvad der skal stå
                                                    // i treeviewitem. Ligesom textbox.text = kundePic

                    foreach (IBooking booking in kunde.Bookinger)
                    {
                        treeItemBooking = new TreeViewItem(); StackPanel bookingPic = new StackPanel();
                        bookingPic.Orientation = Orientation.Horizontal;
                        Image img2 = new Image();
                        img2.Source = new BitmapImage(new Uri("pack://application:,,,/Images/Booking.png"));
                        img2.Height = 15;
                        img2.Width = 15;
                        var txt2 = new TextBlock();
                        txt2.Margin = new Thickness(7, 0, 0, 0);
                        txt2.Text = "Booking Id: "+booking.BookingId.ToString();
                        bookingPic.Children.Add(img2);
                        bookingPic.Children.Add(txt2);
                
                        treeItemBooking.Header = bookingPic;
                       
                        foreach (IVærelse værelse in booking.MineVærelser)
                        {
                            treeItemVærelse = new TreeViewItem(); StackPanel værelsePic = new StackPanel();
                            værelsePic.Orientation = Orientation.Horizontal;
                            Image img3 = new Image();
                            img3.Source = new BitmapImage(new Uri("pack://application:,,,/Images/Værelse.png"));
                            img3.Height = 15;
                            img3.Width = 15;
                            var txt3 = new TextBlock();
                            txt3.Margin = new Thickness(7, 0, 0, 0);
                            txt3.Text =værelse.Type;
                            værelsePic .Children.Add(img3);
                            værelsePic.Children.Add(txt3);

                            treeItemVærelse.Header = værelsePic;
                                                       
                            foreach (IForbrug forbrug in booking.Mineforbrug)
                            {
                               treeItemForbrug = new TreeViewItem(); StackPanel forbrugPic = new StackPanel();
                               forbrugPic.Orientation = Orientation.Horizontal;
                               Image img4 = new Image();
                               img4.Source = new BitmapImage(new Uri("pack://application:,,,/Images/Forbrug.png"));
                               img4.Height = 15;
                               img4.Width = 15;
                               var txt4 = new TextBlock();
                               txt4.Margin = new Thickness(7, 0, 0, 0);
                               txt4.Text = "ForbrugsId " + forbrug.ForbrugId + ", Samlet Pris: " + forbrug.Pris.ToString();
                               forbrugPic.Children.Add(img4);
                               forbrugPic.Children.Add(txt4);

                                treeItemForbrug.Header = forbrugPic;
                                
                                foreach (ITilbehør tilbehør in forbrug.mineTilbehør)
                                {
                                    treeItemTilbehør = new TreeViewItem() { Header = tilbehør.Betegnelse + " " + tilbehør.Pris + " kr" };
                                    treeItemForbrug.Items.Add(treeItemTilbehør);
                                }
                                // Her vælger vi en af treeviewitems og adder en anden treeviewitem, så det addede treeviewitem kommer
                                // til at ligge inde i den første treeviewitem. 
                                treeItemVærelse.Items.Add(treeItemForbrug);
                            }
                            treeItemBooking.Items.Add(treeItemVærelse);
                        }
                        treeItemKunde.Items.Add(treeItemBooking);
                    }
                    treeviewName.Items.Add(treeItemKunde);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}
